vue0.11.9源码 src_api_global.js
Last Updated:2022-12-30
var mergeOptions = require('../util/merge-option')
分析mergeOptions逻辑,参见post: vue0.11.9源码 src_util_merge-option.js
nextTick 逻辑
最终源码是在src/util/env.js#L30
先是一个“立即执行函数”
exports.nextTick = (function(){ ... return function trueFunc() {} })()
函数的核心逻辑就是。如果有MutationObserver
就使用它,没有的话就使用setTimeout
MutationObserver
的回调是一个微任务 JavaScript执行机制-读文笔记
setTimeout 回调是一个宏任务
MutationObserver
另见: JavaScript 工作原理之十-使用 MutationObserver 监测 DOM 变化
核心代码段:
if (typeof MutationObserver !== 'undefined') {
var counter = 1
var observer = new MutationObserver(handle)
var textNode = document.createTextNode(counter)
observer.observe(textNode, {
characterData: true
})
timerFunc = function () {
counter = (counter + 1) % 2 // TBC: 为何要取奇偶性,为何不直接 counter++ 或者 counter += 1 ? 目前我个人认为是没有区别
textNode.data = counter
}
}